package ads.corporativa.aula3004.tdd;

import java.util.HashMap;
import java.util.Map;

public class ConversorRomanoToDecimal {

	private static Map<Character, Integer> symbols = new HashMap<Character, Integer>() {
		private static final long serialVersionUID = 1L;
		{
			put('I', 1);
			put('V', 5);
			put('X', 10);
			put('L', 50);
			put('C', 100);
			put('D', 500);
			put('M', 1000);
		}
	};

	public static int getIntValue(Character symbol) {
		if (!symbols.containsKey(symbol))
			throw new IllegalArgumentException("O simbolo "
					+ String.valueOf(symbol) + " não é valido");
		return symbols.get(symbol);
	}

	public static int convert(String numRomano) {
		if (numRomano == null)
			throw new IllegalArgumentException("Numero nao pode ser null");

		int result = 0;
		int atual = 0;
		int posterior = 0;

		for (int i = 0; i < numRomano.length() - 1; i++) {
			atual = getIntValue(numRomano.charAt(i));
			posterior = getIntValue(numRomano.charAt(i+1));
		}
		
		int i = 0;
		int len = numRomano.length();
		while (i < len) {
			atual = getIntValue(numRomano.charAt(i));
			i++;
			posterior = (i < len) ? getIntValue(numRomano.charAt(i)): 0;

			if (atual < posterior) {
				result += (atual * -1);
			} else {
				result += atual;
			}
		}
		return result;
	}
}
